##在pytest中想要做teardown的处理，除了使用带有yield的fixture函数，还可以直接添加终结器。

import pytest


@pytest.fixture()
def demo_fixture(request):
    def demo_finalizer():
        print("\n在每个case完成后执行的teardown") #4
    def demo_finalizer2():
        print("\n在每个case完成后执行的teardown2") #3

    #注册demo_finalizer为终结函数
    #这里要注意的是，多个终结器的情况下，执行的顺序是与注册时候相反的。
    request.addfinalizer(demo_finalizer)
    request.addfinalizer(demo_finalizer2)

    ##防止teardown的处理逻辑不执行可以将测试场景写在下面
    print("\n这个fixture在每个case前执行一次")   #1


def test_01(demo_fixture):
    print("\n===执行了case: test_01===")  #2

def test_02(demo_fixture):
    print("\n===执行了case: test_02===")

if __name__ == '__main__':
    pytest.main(['-s', 'test_module.py'])